package com.jeesite.modules.common.service;

import com.jeesite.common.lang.StringUtils;
import com.jeesite.modules.common.dao.SysMsgDao;
import com.jeesite.modules.msg.utils.MsgPushUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @description:
 * @author: ciye
 * @date: 2022/9/29 14:39
 */
@Service
@RequiredArgsConstructor
public class SysMsgService {
    @Resource
    private SysMsgDao sysMsgDao;

    /**
     * 通过bizKey, bizType, receiveUserCode将一条消息标记为已读
     * @param bizKey
     * @param bizType
     * @param receiveUserCode
     */
    public void makeMsgReadByBiz(String bizKey, String bizType, String receiveUserCode) {
        // 有接收人，清空接收人的未读消息
        if (StringUtils.isNotBlank(receiveUserCode)) {
            // 将此接收人的这条消息标记为已读
            MsgPushUtils.readMsgByBiz(bizKey, bizType, receiveUserCode);
        } else {
            // 通过bizKey和bizType查找所有未读的消息接收人
            List<String> receiveUserCodes = sysMsgDao.getReceiveUserCodeByBiz(bizKey, bizType);
            // 将所有的接收人消息标记为已读
            for (String tempReceiveUserCode : receiveUserCodes) {
                MsgPushUtils.readMsgByBiz(bizKey, bizType, tempReceiveUserCode);
            }
        }

    }

    /**
     * 将某个接收者的所有的未读消息设置为已读
     * receiveUserCode为空，则是所有的未读消息设置为已读
     * @param receiveUserCode
     */
    public void makeAllMsgRead(String receiveUserCode) {
        // 有接收人，清空接收人的未读消息
        if (StringUtils.isNotBlank(receiveUserCode)) {
            MsgPushUtils.readMsgByBiz(null, null, receiveUserCode);
        } else {
            // 查找所有未读的消息接收人
            List<String> receiveUserCodes = sysMsgDao.makeAllMsgRead(receiveUserCode);
            // 将所有的接收人消息标记为已读
            for (String tempReceiveUserCode : receiveUserCodes) {
                MsgPushUtils.readMsgByBiz(null, null, tempReceiveUserCode);
            }
        }
    }

}
